package com.onion.auth.support;

import com.onion.auth.support.vo.AuthUser;

/**
 * 权限认证提供者
 * @param <K>
 */
public interface AuthorizeProvider<K extends java.io.Serializable> {

    /**
     * 类型
     * @return
     */
    String getType();

    /**
     * 根据token获取用户信息
     * @param userToken
     * @return
     */
    AuthUser<K> getAuthUser(String userToken);

    /**
     * 用户登陆
     * @param userToken
     * @param authUser
     */
    void cacheToken(String userToken, AuthUser<K> authUser);

    /**
     * 刷新用户Token
     * @param userToken
     */
    void refreshToken(String userToken);

    /**
     * 清除用户Token
     * @param userToken
     */
    void clearToken(String userToken);

    /**
     * 判断用户是否拥有该角色
     * @param userId
     * @param role
     * @return
     */
    boolean hasRole(K userId, String role);

    /**
     * 判断用户是否拥有该权限
     * @param userId
     * @param permission
     * @return
     */
    boolean hasPermission(K userId, String permission);

}